package com.season.seasonStudy.javase.j_002_equals;
/**
 * 了解equals hashcode
 * 
 * hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值
 * public int hashCode()返回该对象的哈希码值。
 * 支持此方法是为了提高哈希表（例如 java.util.Hashtable 提供的哈希表）的性能。
 *  
 * 在重写父类的equals方法时，也重写hashcode方法，
 * 使相等的两个对象获取的HashCode也相等，
 * 这样当此对象做Map类中的Key时，两个equals为true的对象其获取的value都是同一个，比较符合实际。
 *  
 */
public class EqualsTest {
	
}

class Users {

// 实体类一般添加id,唯一标识,为了sql主键
	private int id;
	private String name;
	private int age;


	/**
	 * 重写users的hashcode
	 * int.不出来  封装类可以.	Integer.valueOf();/parseInt();
	 * 
	 * int也不需要,因为primitive主数据类型只需要==	对象才需要equals判断内容
	 * 
	 * 我自己的重写equals方法	一般写好自己的类后,自己最好把equals方法写好
	 * 
	 * 可机器生成
	 */
	
	/**
	public int hashCode() {
		//return super.hashCode();
		return Integer.valueOf(i);
	}
	*/
	
	/**
	public boolean equals(Object obj) {
		if (obj==this) {
			return true;
		} else if(obj instanceof Users) {
			Users another = (Users)obj;
			return another.getId()==this.getId();
		}else {
			return false;
		}
	}
	*/
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Users other = (Users) obj;
		if (id != other.id)
			return false;
		return true;
	}
	
	public Users(int id, String name, int age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public Users() {
		super();
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Users [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

}
